<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    // 封装队列类
    function Queue() {
        // 属性
        this.items = []

        // 方法
        // 1.将元素加入到队列
        Queue.prototype.enqueue = function (element) {
            this.items.push(element)
        }

        // 2.从队列中删除前端元素
        Queue.prototype.dequeue = function () {
            return this.items.shift()
        }

        // 3.查看前端的元素
        Queue.prototype.front = function () {
            return this.items[0]
        }

        // 4.查看队列是否为空
        Queue.prototype.isEmpty = function () {
            return this.items.length == 0
        }

        // 5.查看队列中的元素个数
        Queue.prototype.size = function () {
            return this.items.length
        }

        // 6.toString方法
        Queue.prototype.toString = function () {
            var resultString = ''
            for (var i = 0; i < this.items.length; i++) {
                resultString += this.items[i] + ' '
            }
            return resultString
        }
    }

    // 使用队列
    // var queue = new Queue()
    //
    // queue.enqueue('abc')
    // queue.enqueue('bac')
    // alert(queue)
    //
    // queue.dequeue()
    // alert(queue)

    // 面试题： 击鼓传花
    function passGame(nameList,num) {
        // 1.创建一个队列结构
        var queue = new Queue()

        // 2.将所有人一次加入列表
        for (var i = 0; i < nameList.length; i++) {
            queue.enqueue(nameList[i])
        }

        // 3.开始数数字
        while (queue.size() > 1) {
            // 不是num时，重新加入到队列的末尾
            // 是num这个数字的时候，将其从队列中删除
            // 3.1.num数字之前的人重新放入到队列的末尾
            for (var i = 0; i < num - 1; i++) {
                queue.enqueue(queue.dequeue())
            }
            // 3.2.num 对相应的这个人，直接从队列中删除
            queue.dequeue()
        }

        // 4.获取剩下的那个人
        alert(queue.size())
        var endName = queue.front()
        alert('最终剩下的人' + endName)

        return nameList.indexOf(endName)
    }

    // 测试
    names = ['123','456','789','147']
    alert(passGame(names,2))

</script>e

</body>
</html>
